package com.Comparaisons;

import java.util.LinkedList;

/**
 * ArbreComparaisons construit un arbre qui permet de comparer les différents arguments communs de deux modeles (ici, Comparaisons)
 * <br/>
 * par exemple : si M1(class) et M2 (class,class) : <br/>
 *              a<0,0> ----- b<0,1>   <br/>
 *      a<0,1>                            <br/>
 * <br/>
 * b est un fils de a<0,0>
 * @author florent
 */
public class ArbreComparaisons{

	private Comparaison noeud; //un noeud de l'arbre 
	private LinkedList<ArbreComparaisons> branches = new LinkedList<ArbreComparaisons>(); //liste des fils de ce noeud

	/**
	 * Construit un arbre a partir de ce noeud
	 * @param noeud
	 */
	public ArbreComparaisons(Comparaison noeud){
		this.noeud = noeud;
	}

	/**
	 * Ajoute un fil (/ une branche) à ce noeud
	 * @param branche branche à ajouter
	 */
	public void add(Comparaison branche){
		this.branches.add(new ArbreComparaisons(branche));
	}               

	/**
	 * Retourne le noeud de l'arbre
	 * @return le noeud
	 */
	public Comparaison getNoeud(){
		return noeud;
	}

	/**
	 * Retourne la liste des fils du noeud
	 * @return la liste des fils du noeud
	 */
	public LinkedList<ArbreComparaisons> getBranches(){
		return branches;
	}
	
	public String toString(){
		StringBuffer sb = new StringBuffer();
		sb.append(noeud+" : "+noeud.getNb());
		sb.append("\n");
		for(ArbreComparaisons b : branches){
			sb.append("  "+noeud+" /\\ "+b.getNoeud()+" : "+b.getNoeud().getNb());
			sb.append("\n");
		}
		return sb.toString();
	}

	public boolean contient(Comparaison comparaison2) {
		for(ArbreComparaisons arbre : branches){
			if(arbre.getNoeud().equals(comparaison2))
				return true;
		}
		return false;
	}

}
